home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / siginfo.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  9KB  |  314 lines

  1. /* siginfo_t, sigevent and constants.  Linux version.
  2.    Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. #if !defined _SIGNAL_H && !defined __need_siginfo_t \
  21.     && !defined __need_sigevent_t
  22. # error "Never include this file directly.  Use <signal.h> instead"
  23. #endif
  24.  
  25. #include <bits/wordsize.h>
  26.  
  27. #if (!defined __have_sigval_t \
  28.      && (defined _SIGNAL_H || defined __need_siginfo_t \
  29.      || defined __need_sigevent_t))
  30. # define __have_sigval_t    1
  31.  
  32. /* Type for data associated with a signal.  */
  33. typedef union sigval
  34.   {
  35.     int sival_int;
  36.     void *sival_ptr;
  37.   } sigval_t;
  38. #endif
  39.  
  40. #if (!defined __have_siginfo_t \
  41.      && (defined _SIGNAL_H || defined __need_siginfo_t))
  42. # define __have_siginfo_t    1
  43.  
  44. # define __SI_MAX_SIZE     128
  45. # if __WORDSIZE == 64
  46. #  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
  47. # else
  48. #  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
  49. # endif
  50.  
  51. typedef struct siginfo
  52.   {
  53.     int si_signo;        /* Signal number.  */
  54.     int si_errno;        /* If non-zero, an errno value associated with
  55.                    this signal, as defined in <errno.h>.  */
  56.     int si_code;        /* Signal code.  */
  57.  
  58.     union
  59.       {
  60.     int _pad[__SI_PAD_SIZE];
  61.  
  62.      /* kill().  */
  63.     struct
  64.       {
  65.         __pid_t si_pid;    /* Sending process ID.  */
  66.         __uid_t si_uid;    /* Real user ID of sending process.  */
  67.       } _kill;
  68.  
  69.     /* POSIX.1b timers.  */
  70.     struct
  71.       {
  72.         int si_tid;        /* Timer ID.  */
  73.         int si_overrun;    /* Overrun count.  */
  74.         sigval_t si_sigval;    /* Signal value.  */
  75.       } _timer;
  76.  
  77.     /* POSIX.1b signals.  */
  78.     struct
  79.       {
  80.         __pid_t si_pid;    /* Sending process ID.  */
  81.         __uid_t si_uid;    /* Real user ID of sending process.  */
  82.         sigval_t si_sigval;    /* Signal value.  */
  83.       } _rt;
  84.  
  85.     /* SIGCHLD.  */
  86.     struct
  87.       {
  88.         __pid_t si_pid;    /* Which child.  */
  89.         __uid_t si_uid;    /* Real user ID of sending process.  */
  90.         int si_status;    /* Exit value or signal.  */
  91.         __clock_t si_utime;
  92.         __clock_t si_stime;
  93.       } _sigchld;
  94.  
  95.     /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
  96.     struct
  97.       {
  98.         void *si_addr;    /* Faulting insn/memory ref.  */
  99.       } _sigfault;
  100.  
  101.     /* SIGPOLL.  */
  102.     struct
  103.       {
  104.         long int si_band;    /* Band event for SIGPOLL.  */
  105.         int si_fd;
  106.       } _sigpoll;
  107.       } _sifields;
  108.   } siginfo_t;
  109.  
  110.  
  111. /* X/Open requires some more fields with fixed names.  */
  112. # define si_pid        _sifields._kill.si_pid
  113. # define si_uid        _sifields._kill.si_uid
  114. # define si_timerid    _sifields._timer.si_tid
  115. # define si_overrun    _sifields._timer.si_overrun
  116. # define si_status    _sifields._sigchld.si_status
  117. # define si_utime    _sifields._sigchld.si_utime
  118. # define si_stime    _sifields._sigchld.si_stime
  119. # define si_value    _sifields._rt.si_sigval
  120. # define si_int        _sifields._rt.si_sigval.sival_int
  121. # define si_ptr        _sifields._rt.si_sigval.sival_ptr
  122. # define si_addr    _sifields._sigfault.si_addr
  123. # define si_band    _sifields._sigpoll.si_band
  124. # define si_fd        _sifields._sigpoll.si_fd
  125.  
  126.  
  127. /* Values for `si_code'.  Positive values are reserved for kernel-generated
  128.    signals.  */
  129. enum
  130. {
  131.   SI_ASYNCNL = -60,        /* Sent by asynch name lookup completion.  */
  132. # define SI_ASYNCNL    SI_ASYNCNL
  133.   SI_TKILL = -6,        /* Sent by tkill.  */
  134. # define SI_TKILL    SI_TKILL
  135.   SI_SIGIO,            /* Sent by queued SIGIO. */
  136. # define SI_SIGIO    SI_SIGIO
  137.   SI_ASYNCIO,            /* Sent by AIO completion.  */
  138. # define SI_ASYNCIO    SI_ASYNCIO
  139.   SI_MESGQ,            /* Sent by real time mesq state change.  */
  140. # define SI_MESGQ    SI_MESGQ
  141.   SI_TIMER,            /* Sent by timer expiration.  */
  142. # define SI_TIMER    SI_TIMER
  143.   SI_QUEUE,            /* Sent by sigqueue.  */
  144. # define SI_QUEUE    SI_QUEUE
  145.   SI_USER,            /* Sent by kill, sigsend, raise.  */
  146. # define SI_USER    SI_USER
  147.   SI_KERNEL = 0x80        /* Send by kernel.  */
  148. #define SI_KERNEL    SI_KERNEL
  149. };
  150.  
  151.  
  152. /* `si_code' values for SIGILL signal.  */
  153. enum
  154. {
  155.   ILL_ILLOPC = 1,        /* Illegal opcode.  */
  156. # define ILL_ILLOPC    ILL_ILLOPC
  157.   ILL_ILLOPN,            /* Illegal operand.  */
  158. # define ILL_ILLOPN    ILL_ILLOPN
  159.   ILL_ILLADR,            /* Illegal addressing mode.  */
  160. # define ILL_ILLADR    ILL_ILLADR
  161.   ILL_ILLTRP,            /* Illegal trap. */
  162. # define ILL_ILLTRP    ILL_ILLTRP
  163.   ILL_PRVOPC,            /* Privileged opcode.  */
  164. # define ILL_PRVOPC    ILL_PRVOPC
  165.   ILL_PRVREG,            /* Privileged register.  */
  166. # define ILL_PRVREG    ILL_PRVREG
  167.   ILL_COPROC,            /* Coprocessor error.  */
  168. # define ILL_COPROC    ILL_COPROC
  169.   ILL_BADSTK            /* Internal stack error.  */
  170. # define ILL_BADSTK    ILL_BADSTK
  171. };
  172.  
  173. /* `si_code' values for SIGFPE signal.  */
  174. enum
  175. {
  176.   FPE_INTDIV = 1,        /* Integer divide by zero.  */
  177. # define FPE_INTDIV    FPE_INTDIV
  178.   FPE_INTOVF,            /* Integer overflow.  */
  179. # define FPE_INTOVF    FPE_INTOVF
  180.   FPE_FLTDIV,            /* Floating point divide by zero.  */
  181. # define FPE_FLTDIV    FPE_FLTDIV
  182.   FPE_FLTOVF,            /* Floating point overflow.  */
  183. # define FPE_FLTOVF    FPE_FLTOVF
  184.   FPE_FLTUND,            /* Floating point underflow.  */
  185. # define FPE_FLTUND    FPE_FLTUND
  186.   FPE_FLTRES,            /* Floating point inexact result.  */
  187. # define FPE_FLTRES    FPE_FLTRES
  188.   FPE_FLTINV,            /* Floating point invalid operation.  */
  189. # define FPE_FLTINV    FPE_FLTINV
  190.   FPE_FLTSUB            /* Subscript out of range.  */
  191. # define FPE_FLTSUB    FPE_FLTSUB
  192. };
  193.  
  194. /* `si_code' values for SIGSEGV signal.  */
  195. enum
  196. {
  197.   SEGV_MAPERR = 1,        /* Address not mapped to object.  */
  198. # define SEGV_MAPERR    SEGV_MAPERR
  199.   SEGV_ACCERR            /* Invalid permissions for mapped object.  */
  200. # define SEGV_ACCERR    SEGV_ACCERR
  201. };
  202.  
  203. /* `si_code' values for SIGBUS signal.  */
  204. enum
  205. {
  206.   BUS_ADRALN = 1,        /* Invalid address alignment.  */
  207. # define BUS_ADRALN    BUS_ADRALN
  208.   BUS_ADRERR,            /* Non-existant physical address.  */
  209. # define BUS_ADRERR    BUS_ADRERR
  210.   BUS_OBJERR            /* Object specific hardware error.  */
  211. # define BUS_OBJERR    BUS_OBJERR
  212. };
  213.  
  214. /* `si_code' values for SIGTRAP signal.  */
  215. enum
  216. {
  217.   TRAP_BRKPT = 1,        /* Process breakpoint.  */
  218. # define TRAP_BRKPT    TRAP_BRKPT
  219.   TRAP_TRACE            /* Process trace trap.  */
  220. # define TRAP_TRACE    TRAP_TRACE
  221. };
  222.  
  223. /* `si_code' values for SIGCHLD signal.  */
  224. enum
  225. {
  226.   CLD_EXITED = 1,        /* Child has exited.  */
  227. # define CLD_EXITED    CLD_EXITED
  228.   CLD_KILLED,            /* Child was killed.  */
  229. # define CLD_KILLED    CLD_KILLED
  230.   CLD_DUMPED,            /* Child terminated abnormally.  */
  231. # define CLD_DUMPED    CLD_DUMPED
  232.   CLD_TRAPPED,            /* Traced child has trapped.  */
  233. # define CLD_TRAPPED    CLD_TRAPPED
  234.   CLD_STOPPED,            /* Child has stopped.  */
  235. # define CLD_STOPPED    CLD_STOPPED
  236.   CLD_CONTINUED            /* Stopped child has continued.  */
  237. # define CLD_CONTINUED    CLD_CONTINUED
  238. };
  239.  
  240. /* `si_code' values for SIGPOLL signal.  */
  241. enum
  242. {
  243.   POLL_IN = 1,            /* Data input available.  */
  244. # define POLL_IN    POLL_IN
  245.   POLL_OUT,            /* Output buffers available.  */
  246. # define POLL_OUT    POLL_OUT
  247.   POLL_MSG,            /* Input message available.   */
  248. # define POLL_MSG    POLL_MSG
  249.   POLL_ERR,            /* I/O error.  */
  250. # define POLL_ERR    POLL_ERR
  251.   POLL_PRI,            /* High priority input available.  */
  252. # define POLL_PRI    POLL_PRI
  253.   POLL_HUP            /* Device disconnected.  */
  254. # define POLL_HUP    POLL_HUP
  255. };
  256.  
  257. # undef __need_siginfo_t
  258. #endif    /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
  259.  
  260.  
  261. #if (defined _SIGNAL_H || defined __need_sigevent_t) \
  262.     && !defined __have_sigevent_t
  263. # define __have_sigevent_t    1
  264.  
  265. /* Structure to transport application-defined values with signals.  */
  266. # define __SIGEV_MAX_SIZE    64
  267. # if __WORDSIZE == 64
  268. #  define __SIGEV_PAD_SIZE    ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
  269. # else
  270. #  define __SIGEV_PAD_SIZE    ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
  271. # endif
  272.  
  273. typedef struct sigevent
  274.   {
  275.     sigval_t sigev_value;
  276.     int sigev_signo;
  277.     int sigev_notify;
  278.  
  279.     union
  280.       {
  281.     int _pad[__SIGEV_PAD_SIZE];
  282.  
  283.     /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
  284.        thread to receive the signal.  */
  285.     __pid_t _tid;
  286.  
  287.     struct
  288.       {
  289.         void (*_function) (sigval_t);    /* Function to start.  */
  290.         void *_attribute;            /* Really pthread_attr_t.  */
  291.       } _sigev_thread;
  292.       } _sigev_un;
  293.   } sigevent_t;
  294.  
  295. /* POSIX names to access some of the members.  */
  296. # define sigev_notify_function   _sigev_un._sigev_thread._function
  297. # define sigev_notify_attributes _sigev_un._sigev_thread._attribute
  298.  
  299. /* `sigev_notify' values.  */
  300. enum
  301. {
  302.   SIGEV_SIGNAL = 0,        /* Notify via signal.  */
  303. # define SIGEV_SIGNAL    SIGEV_SIGNAL
  304.   SIGEV_NONE,            /* Other notification: meaningless.  */
  305. # define SIGEV_NONE    SIGEV_NONE
  306.   SIGEV_THREAD,            /* Deliver via thread creation.  */
  307. # define SIGEV_THREAD    SIGEV_THREAD
  308.  
  309.   SIGEV_THREAD_ID = 4        /* Send signal to specific thread.  */
  310. #define SIGEV_THREAD_ID    SIGEV_THREAD_ID
  311. };
  312.  
  313. #endif    /* have _SIGNAL_H.  */
  314.